// API工具类 - 实际调用后端API版本

// 基础请求URL
const BASE_URL = 'http://localhost:3000/api'; // 后端服务器地址

// 模拟延迟函数 - 保留以便在请求过程中显示加载状态
const mockDelay = (ms = 100) => new Promise(resolve => setTimeout(resolve, ms));

// 实际请求方法
const request = (url, method, data = {}, needToken = false) => {
  // 构建请求配置
  const options = {
    url: BASE_URL + url,
    method,
    data,
    header: {
      'content-type': 'application/json'
    }
  };
  
  // 如果需要token，从本地存储获取并添加到请求头
  if (needToken) {
    const token = tt.getStorageSync('token');
    if (token) {
      options.header['Authorization'] = `Bearer ${token}`;
    }
  }
  
  console.log('实际API请求:', options);
  
  // 使用tt.request发起实际请求
  return new Promise((resolve, reject) => {
    tt.request({
      ...options,
      success: (res) => {
        console.log('API请求成功:', res.data);
        resolve(res.data);
      },
      fail: (err) => {
        console.error('API请求失败:', err);
        reject(err);
      },
      complete: () => {
        console.log('API请求完成:', url);
      }
    });
  });
};

// 用户相关接口 - 实际调用后端API版本
export const userAPI = {
  // 抖音登录 - 实际调用后端登录接口
  login: ({ code, userInfo }) => {
    console.log('登录请求参数:', { code, userInfo });
    return mockDelay().then(() => {
      return request('/user/login', 'POST', { code, userInfo }, false);
    });
  },
  // 获取用户信息 - 实际调用后端获取用户信息接口
  getUserInfo: () => {
    console.log('获取用户信息请求');
    return mockDelay().then(() => {
      return request('/user/info', 'GET', {}, true);
    });
  }
};

// 商品相关接口 - 实际调用后端API版本
export const goodsAPI = {
  // 获取商品列表 - 实际调用后端获取商品列表接口
  getGoodsList: (page = 1, pageSize = 10) => {
    console.log('获取商品列表请求参数:', { page, pageSize });
    return mockDelay().then(() => {
      return request('/goods', 'GET', { page, pageSize }, false);
    });
  },
  // 获取商品详情 - 实际调用后端获取商品详情接口
  getGoodsDetail: (id) => {
    console.log('获取商品详情请求参数:', { id });
    return mockDelay().then(() => {
      return request(`/goods/${id}`, 'GET', {}, false);
    });
  }
};

// 订单相关接口 - 实际调用后端API版本
export const orderAPI = {
  // 创建订单 - 实际调用后端创建订单接口
  createOrder: (data) => {
    // 防御性编程，确保数据是对象
    const safeData = typeof data === 'object' && data !== null ? data : {};
    console.log('创建订单请求参数:', safeData);
    
    return mockDelay().then(() => {
      return request('/order', 'POST', safeData, true); // 修复API路径，与后端路由匹配
    }).catch(error => {
      console.error('创建订单API调用失败:', error);
      // 重新抛出错误，让调用方可以处理
      throw error;
    });
  },
  // 获取用户订单列表 - 实际调用后端获取订单列表接口
  getUserOrders: (page = 1, pageSize = 10) => {
    console.log('获取订单列表请求参数:', { page, pageSize });
    return mockDelay().then(() => {
      return request('/order', 'GET', { page, pageSize }, true);
    });
  },
  // 更新订单状态 - 实际调用后端更新订单状态接口
  updateOrderStatus: (id, status) => {
    console.log('更新订单状态请求参数:', { id, status });
    return mockDelay().then(() => {
      return request('/order/update', 'POST', { id, status }, true);
    });
  },
  // 获取订单详情 - 实际调用后端获取订单详情接口
  getOrderDetail: (id) => {
    console.log('获取订单详情请求参数:', { id });
    return mockDelay().then(() => {
      return request(`/order/detail/${id}`, 'GET', {}, true);
    });
  },
  
  // 支付订单 - 实际调用后端支付订单接口
  payOrder: (orderId, paymentMethod) => {
    console.log('支付订单请求参数:', { orderId, paymentMethod });
    return mockDelay().then(() => {
      return request('/order/pay', 'POST', { orderId, paymentMethod }, true);
    });
  },
  
  // 删除订单 - 实际调用后端删除订单接口
  deleteOrder: (orderId) => {
    console.log('删除订单请求参数:', { orderId });
    return mockDelay().then(() => {
      return request(`/order/${orderId}`, 'DELETE', {}, true);
    });
  }
};

// 订单地址相关接口 - 实际调用后端API版本
export const orderAddressAPI = {
  // 保存订单地址
  saveOrderAddress: (data) => {
    // 防御性编程，确保数据是对象
    const safeData = typeof data === 'object' && data !== null ? data : {};
    console.log('保存订单地址请求参数:', safeData);
    
    // 将驼峰命名法转换为下划线命名法，与后端参数名保持一致
    // 根据用户需求，province、city、district设置为空值
    const formattedData = {
      order_id: safeData.orderId || '',
      consignee_name: safeData.consigneeName || '',
      phone_number: safeData.phoneNumber || '',
      province: '',  // 用户要求设置为空值
      city: '',      // 用户要求设置为空值
      district: '',  // 用户要求设置为空值
      detail_address: safeData.detailAddress || '',
      remarks: safeData.remarks || '',
      delivery_time: safeData.deliveryTime || ''
    };
    
    console.log('格式化后的请求参数:', formattedData);
    
    return mockDelay().then(() => {
      return request('/order-address', 'POST', formattedData, false);
    }).catch(error => {
      console.error('保存订单地址API调用失败:', error);
      // 重新抛出错误，让调用方可以处理
      throw error;
    });
  },
  
  // 获取订单地址
  getOrderAddress: (orderId) => {
    console.log('获取订单地址请求参数:', { orderId });
    return mockDelay().then(() => {
      return request('/order_address', 'GET', { orderId }, true);
    });
  },
  
  // 更新订单地址
  updateOrderAddress: (data) => {
    // 防御性编程，确保数据是对象
    const safeData = typeof data === 'object' && data !== null ? data : {};
    console.log('更新订单地址请求参数:', safeData);
    
    return mockDelay().then(() => {
      return request('/order_address', 'PUT', safeData, true);
    });
  },
  
  // 删除订单地址
  deleteOrderAddress: (orderId) => {
    console.log('删除订单地址请求参数:', { orderId });
    return mockDelay().then(() => {
      return request('/order_address', 'DELETE', { orderId }, true);
    });
  }
};

// 导出实际的request方法
export default request;